// 项目的入口文件
// 开启服务
const express = require('express');
const app = express();
app.listen(3008, () => console.log('Big Event running~'));

// 配置应用级别的中间件
// 实现 CORS 跨域的中间件
const cors = require('cors');
app.use(cors());
/* app.use((req, res, next) => {
    res.setHeader('Access-Control-Allow-Origin', '*');
    next();
}); */

// 开放静态资源 （当客户端请求静态资源时，服务器会把静态资源响应给客户端）
app.use(express.static('uploads'));

// 设置中间件 接收urlencoded类型的请求体（POST）;formdata 类型数据 不能做处理
app.use(express.urlencoded({ extended: false }));

// 中间件 解析token，把token中保存的信息赋值给req.user 控制一些接口不需要权限即可请求
const expressJWT = require('express-jwt');
app.use(expressJWT({ secret: 'bigevent104' }).unless({ path: /^\/api/ }));

// 加载路由模块 并注册成中间件
let loginRouter = require('./routers/login');
let categoryRouter = require('./routers/category');
let articleRouter = require('./routers/article');
let userRouter = require('./routers/user');

// 注册成中间件
app.use('/api', loginRouter);
app.use('/my/article', categoryRouter);
app.use('/my/article', articleRouter);
app.use('/my', userRouter);

// 最后加入一个处理错误的中间件
app.use((err, req, res, next) => {
    // 处理 token 解析错误
    if (err.name === 'UnauthorizedError') {
        console.log(err.message);
        res.send({ status: 1, message: '身份认证失败' });
    }
    // console.log(err.error.name); // err.error.message
    // res.send('错误发现，正在处理中~');
    if (err.error === 'joiError') {
        res.send({ status: 1, message: err.error.message });
    }
});